package online.inote.dic.validator.dic;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang3.StringUtils;
import org.springframework.util.CollectionUtils;

import online.inote.dic.common.utils.ResultFactory;
import online.inote.dic.common.utils.ResultFactory.ResultEnum;
import online.inote.dic.common.utils.spring.BeanFactory;
import online.inote.dic.model.dic.DicEntity;
import online.inote.dic.service.dic.DicService;

/**
 * @description: 字典校验器
 * @author XQF.Sui
 * @created 2019年6月22日 下午8:09:48
 * @version 1.0
 */
public class DicValidator {
	
	private DicService dicService = BeanFactory.getBean(DicService.class);

	/**
	 * @description 保存
	 * @author XQF.Sui
	 * @created 2019年6月22日 下午8:38:48
	 * @param dic
	 * @return
	 */
	public <T> ResultFactory<T> save(DicEntity dic) {
		
		if (dic == null) {
			return ResultFactory.fail("入参不能为空");
		}
		
		List<String> failMessage = new ArrayList<>();
		
		if (StringUtils.isBlank(dic.getId())) {	// 新增数据
			if (StringUtils.isBlank(dic.getName())) {
				failMessage.add("字典名称不能为空");
			}
			
			if(StringUtils.isBlank(dic.getType())) {
				failMessage.add("字典类型不能为空");
			}
			
			if(dic.getStatus() == null) {
				failMessage.add("字典状态不能为空");
			}
			
			if(dic.getEnable() == null) {
				failMessage.add("是否启用不能为空");
			}
			
			if(dic.getSystemId() == null) {
				failMessage.add("归属系统不能为空");
			}
		} else { // 修改数据
			if (StringUtils.isBlank(dic.getId()) && StringUtils.isBlank(dic.getType()) && dic.getStatus() == null
					&& dic.getSystemId() == null) {
				failMessage.add("字典名称、字典类型、字典状态、是否启用不能为空、归属系统不能同时为空");
			}
		}
		
		if (!CollectionUtils.isEmpty(failMessage)) {
			return ResultFactory.create(ResultEnum.PARAM_REQUIRED, StringUtils.join(failMessage));
		}
		
		return ResultFactory.success();
	}
	
	/**
	 * @description 更新状态参数校验
	 * @author XQF.Sui
	 * @created 2019年7月16日 下午9:32:31
	 * @param dic
	 * @return
	 */
	public <T> ResultFactory<T> updateStatus(DicEntity dic) {
		
		if (dic == null) {
			return ResultFactory.fail("入参不能为空");
		}
		
		List<String> failMessage = new ArrayList<>();
		
		if (StringUtils.isBlank(dic.getId())) {
			failMessage.add("字典ID不能为空");
		}
		
		if (dic.getStatus() == null && dic.getEnable() == null) {
			failMessage.add("字典状态和是否启用不能同时为空");
		}
		
		if (!CollectionUtils.isEmpty(failMessage)) {
			return ResultFactory.create(ResultEnum.PARAM_REQUIRED, StringUtils.join(failMessage));
		} else if (!dicService.existsWithPrimaryKey(dic.getId())) {
			return ResultFactory.fail("该字典不存在");
		}
		
		return ResultFactory.success();
	}
}